package code.whmmm.util.simple.sql;

import code.whmmm.util.simple.JavaWarning;
import code.whmmm.util.simple.TimeFormatter;

import java.lang.reflect.Field;
import java.util.Date;
import java.util.Map;

/**
 * Sql 相关工具方法
 * <br/> 创建时间: 2020/1/6 13:50
 *
 * @author Zero
 */
class SqlUtil {

    /**
     * <ul>
     *     根据对象和属性 map ，返回属性的值
     *     <li>如果是 {@link Date} 类型，那么会返回字符串！！</li>
     * </ul>
     *
     * @param fieldsMap
     * @param filedName
     * @param t
     * @param <T>
     * @return
     */
    @SuppressWarnings(JavaWarning.RAW_TYPE)
    public static <T> Object getFieldValue(Map<String, Field> fieldsMap, String filedName, T t) {
        Object o = null;

        if (t instanceof Map) {
            o = ((Map) t).get(filedName);
        } else {
            Field field = fieldsMap.get(filedName);
            if (field == null) {
                throw new RuntimeException("属性错误！类 " + t.getClass().getSimpleName() + "无 "
                        + filedName + " 属性！");
            }

            try {
                o = field.get(t);
            } catch (IllegalAccessException e) {
                throw new RuntimeException(e);
            }
        }

        if (o instanceof Date) {
            o = TimeFormatter.STD_DATETIME.format((Date) o);
        }

        return o;
    }

}
